%% 图像处理
close all; clc; clear;
imgRGB = imread("rgl.jpg");   % img是已经加载的图像变量
img = rgb2gray(imgRGB);

%% 根据直方图定义，通过结构化编程方式给出2-1）中灰度图像的概率形式的直方图
img = imread("rgl.jpg");% 读取图像
% 确保是灰度图像，如果不是，则转换为灰度
% if size(img, 3) == 3
%     img = rgb2gray(img);
% end

% 获取图像尺寸
[height, width] = size(img);

% 初始化灰度级计数器
grayLevels = 0:255; % 从0到255的灰度级
pixelCounts = zeros(1, 256); % 初始化计数数组

% 遍历图像，计算每个灰度级的像素数量
for i = 1:height
    for j = 1:width
        pixelCounts(img(i,j)+1) = pixelCounts(img(i,j)+1) + 1; % 注意加1是因为MATLAB索引从1开始
    end
end

% 计算概率直方图
totalPixels = height * width;   %总的像素数
probabilityHistogram = pixelCounts / totalPixels;   %概率

% 绘制概率直方图，使用bar函数绘制直方图，不显示柱状边缘颜色以美化图形
bar(grayLevels, probabilityHistogram, 'EdgeColor', 'none');

% axis tight; % 紧凑布局，确保x轴范围准确对应灰度级
title('编程概率直方图');xlabel('Gray Level');ylabel('Probability');
% xlim([0 255]); % 设置x轴限，确保覆盖所有灰度级
% ylim([0 6000/239127]); % 设置y轴限，确保概率值在0到1之间 取消注释就会变得非常小
 ylim([0 0.1]);
